package com.leetcode.August;

/**
 * @Description: 19. 删除链表的倒数第 N 个结点
 * 移动第一个指针：
 * 循环 for (int i = 0; i <= n; i++)，使 first 指针向前移动 n+1 步。这样做的目的是为了让 first 和 second 之间保持 n+1 的距离。这里需要注意的是，循环条件是 i <= n，这是因为我们需要 first 指针先移动 n+1 步，这样当 first 指针到达链表尾部时，second 指针正好位于倒数第 n+1 个节点。
 * 同步移动两个指针：
 * 当 first 指针未达到链表尾部时，同步移动 first 和 second 指针，直到 first 指针到达链表尾部。此时，second 指针位于倒数第 n+1 个节点。
 * @Author: Mr.Fxy
 * @CreateTime: 2024-08-26 14:54
 */
public class LC19删除链表的倒数第N个结点 {
    public ListNode removeNthFromEnd(ListNode head, int n) {
     ListNode dummy= new ListNode(0);
        ListNode first = dummy;
        ListNode second = dummy;
        for (int i = 0; i <=n ; i++) {
            first = first.next;
        }
        while(first!=null){
            first=first.next;
            second=second.next;
        }
        second.next=second.next.next;
        return dummy.next;
    }
}
